<?php
/**
 * redis操作
 */
namespace app\common\model\redis;
use app\BaseController;
use think\facade\Cache;
use think\cache\driver\Redis;
class RedisModel extends BaseController
{
    public $redis;
    function __construct() {
        $phpver = phpversion();
        if($phpver>7.3){
            $this->redis = new \Redis();
        }else{
            $this->redis = new Redis();
        }
        $config = config('redis');
        $this->redis->connect($config['service']['host'],$config['service']['port']);
    }
    //=====================================================
    //***************************string********************
    //=====================================================
    /**
     * 设置键值带过期时间
     * @param $name
     * @param $value
     * @param int $time
     * @return int
     */
    public function setexValue($name, $value, int $time=60){
        return $this->redis->setex($name, $time,$value);
    }

    /**
     * 清空所有数据
     * @return bool
     */
    public function flushall(){
        return  $this->redis->flushAll();
    }
    /**
     * 设置k-v值
     * @param $name
     * @param $value
     * @return mixed
     */
    public function setValue($name, $value){
        return $this->redis->set($name,$value);
    }

    /**
     * 获取key值
     * @param $name
     * @return string|null
     */
    public function getValue($name){
        return $this->redis->get($name);
    }

    /**
     * 判断当前的key是否存在
     * @param $key
     * @return int
     */
    public function  existsKey($key){
        return $this->redis->exists($key);
    }

    /**
     * 删除当前的key
     * @param $key
     * @return int
     */
    public function  moveKey($key){
        return $this->redis->del($key);
    }

    /**
     * 获取所有键值
     * @return array
     */
    public function keys(){
        return $this->redis->keys('*');
    }
    /**
     * 自增
     * @return array
     */
    public function incr($keys){
        return $this->redis->incr($keys);
    }
    /**
     * 自减
     * @return array
     */
    public function decr($keys){
        return $this->redis->decr($keys);
    }
    /**
     * 截取字符串
     * @return array
     */
    public function getrange($keys,$start,$end){
        return $this->redis->getrange($keys,$start,$end);
    }
    //=====================================================
    //***************************list********************
    //=====================================================
    /**
     * 将一个值或者多个值，插入到列表头部 （左）
     * @param $data
     * @param $val
     * @return int
     */
    public function lpush($data,$val){
        return $this->redis->lpush($data,$val);
    }

    /**
     * 将一个值或者多个值，插入到列表位部 （右）
     * @param $data
     * @param $val
     * @return int
     */
    public function rpush($data,$val){
        return $this->redis->rpush($data,$val);
    }

    /**
     * 将某个具体的value插入到列把你中某个元素的前面或者后面！
     * @param $data
     * @param $type // before之前/after之后
     * @param $val
     * @return int
     */
    public function linsert($data,$type,$val){
        return $this->redis->linsert($data,$type,$val);
    }

    /**
     * 通过区间获取具体的值！ end-1全部
     * @param $data
     * @param $start
     * @param $end
     * @return array
     */
    public function lrange($data,$start,$end){
        return $this->redis->lrange($data,$start,$end);
    }

    /**
     * 通过下标获得 list 中的某一个值！
     * @param $data
     * @param $index
     * @return string|null
     */
    public function lindex($data,$index){
        return $this->redis->lindex($data,$index);
    }

    /**
     * 返回列表的长度
     * @param $data
     * @return int
     */
    public function llen($data){
        return $this->redis->llen($data);
    }
    /**
     *  移除list的第一个元素
     * @param $data
     * @param $start
     * @param $end
     * @return string|null
     */
    public function lpop($data){
        return $this->redis->lpop($data);
    }

    /**
     * 删除前指定条数据
     * @param $data
     * @param $start
     * @param $end
     * @return array|false
     */
    public function ltrim($data,$start,$end){
        return $this->redis->ltrim($data,$start,$end);
    }
    /**
     * 删除后指定条数据
     * @param $data
     * @param $start
     * @param $end
     * @return array|false
     */
    public function rtrim($data,$start,$end){
        return $this->redis->rtrim($data,$start,$end);
    }
    /**
     * 移除list的最后一个元素
     * @param $data
     * @return string|null
     */
    public function rpop($data){
        return $this->redis->rpop($data);
    }
}
